Problem
【HNOI2012】永无乡
Description
永无乡包含座岛,编号从到,每座岛都有自己的独一无二的重要度,按照重要度可以将这座岛排名,名次用到来表示。
某些岛之间由巨大的桥连接,通过桥可以从一个岛到达另一个岛。如果从岛出发经过若干座(含座)桥可以到达岛,则称岛和岛是连通的。
现在有两种操作:
:表示在岛与岛之间修建一座新桥。
:表示询问当前与岛连通的所有岛中第重要的是哪座岛,即所有与岛连通的岛中重要度排名第小的岛是哪座,请你输出那个岛的编号。
Input
第一行是用空格隔开的两个正整数和,分别表示岛的个数以及一开始存在的桥数。
接下来的一行是用空格隔开的个数,依次描述从岛到岛的重要度排名。
随后的行每行是用空格隔开的两个正整数和,表示一开始就存在一座连接岛和岛的桥。
后面剩下的部分描述操作。
该部分的第一行是一个正整数,表示一共有个操作。
接下来的行依次描述每个操作,操作的格式如上所述,以大写字母或开始,后面跟两个不超过的正整数,字母与数字以及两个数字之间用空格隔开。
Output
对于每个操作都要依次输出一行,其中包含一个整数,表示所询问岛屿的编号。
如果该岛屿不存在,则输出。
Sample Input
1 | 5 1 |
Sample Output
1 | -1 |
HINT
对于的数据,
对于的数据,
标签:并查集
线段树合并
Solution
线段树合并裸题。
只建桥不拆桥,可以用并查集维护是否在同一连通块内,在每个连通块内维护一棵值域线段树,这样可以查第小。对于建桥的操作,用并查集找出是那两个块合并到一起,将两个块内的线段树合并起来。
线段树合并只需要用函数式线段树动态开点,并像可并堆那样递归合并即可。
Code
1 |
|